﻿Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Imports Commander_Wars.Spieletools
Public Class ObjektMaus
    Public Shared Zustand As Zustaende = Zustaende.Normal
    Public Enum Zustaende
        Menue
        Normal
        NichtPlazierbar
        Abzug
        Angriff
        SiloAnzeigeKlein
        SiloAnzeigeMittel
        SiloOmegaRakete
    End Enum
    Private Shared XKoordinaten As Integer
    Public Shared ReadOnly Property XKoordinate() As Integer
        Get
            Return XKoordinaten
        End Get
    End Property
    Private Shared YKoordinaten As Integer
    Public Shared ReadOnly Property YKoordinate() As Integer
        Get
            Return YKoordinaten
        End Get
    End Property
    Public Shared Function GetCursorPosition() As Point
        Return New Point(XKoordinaten, YKoordinaten)
    End Function
    Public Shared Sub SetCursorPosition(ByVal P As Point)
        SetCursorPosition(P.X, P.Y)
    End Sub
    Public Shared Sub SetCursorPosition(ByVal X As Integer, ByVal Y As Integer)
        Hauptmenue.SetSpielfeldpunkt(X, Y)
        If MessageBox.MessageDialogueBox IsNot Nothing Then
            XKoordinaten = X
            YKoordinaten = Y
        Else
            Select Case Hauptmenue.Formmodus
                Case Hauptmenue.Formmodi.Hauptmenue
                    XKoordinaten = X
                    YKoordinaten = Y
                Case Hauptmenue.Formmodi.Kartenauswahl
                    XKoordinaten = X
                    YKoordinaten = Y
                Case Hauptmenue.Formmodi.KartenauswahlMP
                    XKoordinaten = X
                    YKoordinaten = Y
                Case Hauptmenue.Formmodi.Editor
                    If DataSettings.draw3D Then
                        XKoordinaten = X
                        YKoordinaten = Y
                        Objektverwalter.Menue.SetMausBild()
                    ElseIf DataSettings._2D_3D_Malen Then
                        XKoordinaten = X
                        YKoordinaten = Y
                        Objektverwalter.Menue.SetMausBild()
                    Else
                        Objektverwalter.Menue.SetMausBild()
                        If ObjektMaus.Zustand > 0 Then
                            X = Hauptmenue.SpielfeldPunkt.X * Hauptmenue.Feldbreite
                            Y = Hauptmenue.SpielfeldPunkt.Y * Hauptmenue.Feldbreite
                            XKoordinaten = X + Objektverwalter.Spielfeld.BildschirmKooX
                            YKoordinaten = Y + Objektverwalter.Spielfeld.BildschirmKooY
                        Else
                            XKoordinaten = X
                            YKoordinaten = Y
                        End If
                    End If
                Case Hauptmenue.Formmodi.Optionen
                    XKoordinaten = X
                    YKoordinaten = Y
                Case Hauptmenue.Formmodi.LandkartenAuswahlKAMP
                    XKoordinaten = X
                    YKoordinaten = Y
                Case Hauptmenue.Formmodi.Spiel

                    'Vorlaeufig
                    If Hauptmenue.Chatroom IsNot Nothing Then
                        If Hauptmenue.Chatroom.Visible Then
                            If Hauptmenue.Chatroom.Top Then
                                If ObjektMaus.YKoordinate < Hauptmenue.Chatroom.Height + Chat.TopBorder Then
                                    XKoordinaten = X
                                    YKoordinaten = Y
                                    Exit Sub
                                End If
                            Else
                                If ObjektMaus.YKoordinate > DataSettings.BildschirmHoehe - Hauptmenue.Chatroom.Height - Chat.TopBorder Then
                                    XKoordinaten = X
                                    YKoordinaten = Y
                                    Exit Sub
                                End If
                            End If
                        End If
                    End If
                    If DataSettings.draw3D Or DataSettings._2D_3D_Malen Then
                        If Not Hauptmenue.AufzeichnungAbspielen Then
                            If Hauptmenue.Rechteck.Contains(X, Y) = True Then
                                Dim SM As ObjektSpielMenue = Objektverwalter.Menue
                                Select Case SM.Spielmodus
                                    Case ObjektSpielMenue.Spielmodi.Explosion
                                        Dim P As Point
                                        If IsNothing(Objektverwalter.Spielfeld.Laufen) Then
                                            P = Grafikengine.WorldSpaceToScreenSpace(New Vector3(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X + 0.5, 0, -Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y + 0.5))
                                        Else
                                            P = Grafikengine.WorldSpaceToScreenSpace(New Vector3(Objektverwalter.Spielfeld.Laufen.Position.X + 0.5, 0, -Objektverwalter.Spielfeld.Laufen.Position.Y + 0.5))
                                        End If
                                        XKoordinaten = P.X
                                        YKoordinaten = P.Y
                                        Hauptmenue.SetSpielfeldpunkt(P.X, P.Y)
                                    Case Else
                                        XKoordinaten = X
                                        YKoordinaten = Y
                                End Select
                            Else
                                XKoordinaten = X
                                YKoordinaten = Y
                            End If
                        Else
                            If ObjektMaus.YKoordinate < DataSettings.BildschirmHoehe - RekordSpielInfoAnzeige.Hoehe Then
                                XKoordinaten = X
                                YKoordinaten = Y
                            Else
                                XKoordinaten = X
                                YKoordinaten = Y
                            End If
                        End If
                    Else
                        If Not Hauptmenue.AufzeichnungAbspielen Then
                            If Hauptmenue.Rechteck.Contains(X, Y) = True Then
                                Dim SM As ObjektSpielMenue = Objektverwalter.Menue
                                Select Case SM.Spielmodus
                                    Case ObjektSpielMenue.Spielmodi.Explosion
                                        If IsNothing(Objektverwalter.Spielfeld.Laufen) Then
                                            Hauptmenue.CursorPlazieren(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X * Hauptmenue.Feldbreite, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y * Hauptmenue.Feldbreite)
                                        Else
                                            XKoordinaten = Objektverwalter.Spielfeld.Laufen.Position.X * Hauptmenue.Feldbreite + Objektverwalter.Spielfeld.BildschirmKooX
                                            YKoordinaten = Objektverwalter.Spielfeld.Laufen.Position.Y * Hauptmenue.Feldbreite + Objektverwalter.Spielfeld.BildschirmKooY
                                        End If
                                        Hauptmenue.SetSpielfeldpunkt(X, Y)
                                    Case Else
                                        X = Hauptmenue.SpielfeldPunkt.X * Hauptmenue.Feldbreite
                                        Y = Hauptmenue.SpielfeldPunkt.Y * Hauptmenue.Feldbreite
                                        XKoordinaten = X + Objektverwalter.Spielfeld.BildschirmKooX
                                        YKoordinaten = Y + Objektverwalter.Spielfeld.BildschirmKooY
                                End Select

                            Else
                                XKoordinaten = X
                                YKoordinaten = Y
                            End If
                        Else
                            If ObjektMaus.YKoordinate < DataSettings.BildschirmHoehe - RekordSpielInfoAnzeige.Hoehe Then
                                X = Hauptmenue.SpielfeldPunkt.X * Hauptmenue.Feldbreite
                                Y = Hauptmenue.SpielfeldPunkt.Y * Hauptmenue.Feldbreite
                                XKoordinaten = X + Objektverwalter.Spielfeld.BildschirmKooX
                                YKoordinaten = Y + Objektverwalter.Spielfeld.BildschirmKooY
                            Else
                                XKoordinaten = X
                                YKoordinaten = Y
                            End If
                        End If
                    End If
                    Objektverwalter.Menue.SetMausBild()
                    'Jetzt schauen wir ob wir die KOAnzeige spiegeln muessen
                    If Hauptmenue.Rechteck.Y + 200 >= ObjektMaus.YKoordinate Then
                        If Objektverwalter.Spielfeld.KOAnzeigen.GespiegeltGemalt = False Then
                            If Hauptmenue.Rechteck.X + 200 >= ObjektMaus.XKoordinate Then
                                Objektverwalter.Spielfeld.KOAnzeigen.Spiegeln(Hauptmenue.Rechteck.X + Hauptmenue.Rechteck.Width)
                                For I = 0 To Objektverwalter.Spielfeld.Game_Timer.Length - 1
                                    Objektverwalter.Spielfeld.Game_Timer(I).Flip = False
                                Next
                            End If

                        Else
                            If Hauptmenue.Rechteck.X + Hauptmenue.Rechteck.Width - 200 <= ObjektMaus.XKoordinate Then
                                Objektverwalter.Spielfeld.KOAnzeigen.Spiegeln(Hauptmenue.Rechteck.X)
                                For I = 0 To Objektverwalter.Spielfeld.Game_Timer.Length - 1
                                    Objektverwalter.Spielfeld.Game_Timer(I).Flip = True
                                Next
                            End If
                        End If
                    End If
                    'If Rechteck.Y + Rechteck.Height - 200 <= ObjektMaus.YKoordinate Then
                    '    If Objektverwalter.Spielfeld.InfoAnzeige.GespiegeltGemalt = False Then
                    '        If Rechteck.X + 200 >= ObjektMaus.XKoordinate Then
                    '            Objektverwalter.Spielfeld.InfoAnzeige.Spiegeln(Rechteck.X + Rechteck.Width)
                    '        End If
                    '    Else
                    '        If Rechteck.X + Rechteck.Width - 200 <= ObjektMaus.XKoordinate Then
                    '            Objektverwalter.Spielfeld.InfoAnzeige.Spiegeln(Rechteck.X)
                    '        End If
                    '    End If
                    'End If
                Case Hauptmenue.Formmodi.SiegMenue
                    XKoordinaten = X
                    YKoordinaten = Y
                Case Hauptmenue.Formmodi.KOZufallMenue
                    XKoordinaten = X
                    YKoordinaten = Y
                Case Else
                    XKoordinaten = X
                    YKoordinaten = Y
            End Select
        End If
    End Sub
    Public Shared Maustextur() As Texture = {}
    Public Shared MeshCursor() As Objekt3D
    Shared Breite() As Integer = {}
    Shared Hoehe As Integer() = {}
    Shared XHotspotBild() As Integer = {}
    Shared YHotspotBild() As Integer = {}
    Shared AnzahlderZustaende() As Integer = {}
    Private Shared Frames As Integer
    Public Shared Property Frame() As Integer
        Get
            Return Frames
        End Get
        Set(ByVal value As Integer)
            Frames += 1
            If Frames >= AnzahlderZustaende(Zustand) Then
                Frames = 0
            End If
        End Set
    End Property
    Public Shared Visible As Boolean = True
    'Zeichnet das Bild
    Public Shared Sub Malen()
        If ObjektMaus.Visible = True Then
            If DataSettings.draw3D Then
                'Nur kurz den Menue-Cursor malen
                Dim sngRotation As Double = 0
                Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
                With Grafikengine.recBild
                    .X = 0 : .Width = Breite(Zustaende.Menue)
                    .Y = 0 : .Height = Hoehe(Zustaende.Menue)
                End With
                With Grafikengine.ptfRotCenter
                    .X = 0
                    .Y = 0
                End With
                Grafikengine.ptfPosition = New Drawing.Point(XKoordinate - XHotspotBild(Zustaende.Menue), YKoordinate - YHotspotBild(Zustaende.Menue))
                With Grafikengine.szfScale
                    .Height = Hoehe(Zustaende.Menue)
                    .Width = Breite(Zustaende.Menue)
                End With
                Grafikengine.Sprite.Draw2D(Maustextur(Zustaende.Menue), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                'Und jetzt noch den 3D Cursor!
                If Hauptmenue.SpielfeldPunkt.X >= 0 Then
                    'evtl. noch den 3D-Cursor plazieren.
                    If Not (Zustand = Zustaende.Menue) Then
                        'Ich denke bei allen anderen koennen wir zeichnen, oder?
                        Grafikengine.Sprite.End()
                        Dim mat As Matrix = Matrix.Identity
                        mat.M41 = Hauptmenue.SpielfeldPunkt.X + 0.5
                        mat.M43 = -Hauptmenue.SpielfeldPunkt.Y + 0.5
                        MeshCursor(0).Malen(mat)
                        Grafikengine.Sprite.Begin(SpriteFlags.AlphaBlend)
                    End If
                End If
            ElseIf DataSettings._2D_3D_Malen Then
                If Not (Zustand = Zustaende.Menue) Then
                    If Hauptmenue.SpielfeldPunkt.X >= 0 And Objektverwalter.Spielfeld IsNot Nothing Then

                        Grafikengine.Sprite.End()
                        'Drawing 2D Cursor



                        Dim CursorSize As New SizeF(Breite(Zustand) / Hauptmenue.Feldbreite, Hoehe(Zustand) / Hauptmenue.Feldbreite)
                        Dim Pos As New PointF(-XHotspotBild(Zustand) / Hauptmenue.Feldbreite, CursorSize.Height - YHotspotBild(Zustand) / Hauptmenue.Feldbreite)

                        Pos.X += Hauptmenue.SpielfeldPunkt.X + 0.5
                        Pos.Y += Hauptmenue.SpielfeldPunkt.Y - 0.5


                        Dim Vec As Vector3 = ObjektSpielfeld.CalcDraw2D3DVec(Pos.X, ObjektSpielfeld.SpielfeldLayer.Cursor, Pos.Y)
                        Dim FramePos As Single = 1 / (AnzahlderZustaende(Zustand))

                        Dim Cube(3) As CustomVertex.PositionTextured
                        Cube(0) = New CustomVertex.PositionTextured(0, 0, 0, FramePos * Frames, 1)
                        Cube(1) = New CustomVertex.PositionTextured(0, 0, CursorSize.Height, FramePos * Frames, 0)
                        Cube(2) = New CustomVertex.PositionTextured(CursorSize.Width, 0, 0, FramePos * Frames + FramePos, 1)
                        Cube(3) = New CustomVertex.PositionTextured(CursorSize.Width, 0, CursorSize.Height, FramePos * Frames + FramePos, 0)

                        Grafikengine.malen2Din3D(Vec, Cube, Maustextur(Zustand), Color.White)
                        MalenHilfsRadius()

                        Grafikengine.Sprite.Begin(SpriteFlags.AlphaBlend)
                    Else
                        DrawCursor()
                    End If
                Else
                    DrawCursor()
                End If
            Else
                'Wir zeichnen die Landschaft wenn sie auf der angezeigten Hoehe ist
                DrawCursor()
                MalenHilfsRadius()
            End If
        End If
    End Sub
    Shared Sub DrawCursor()
        'Nur kurz den Menue-Cursor malen
        Dim sngRotation As Double = 0
        Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
        With Grafikengine.recBild
            .X = Frames * Breite(Zustand) : .Width = Breite(Zustand)
            .Y = 0 : .Height = Hoehe(Zustand)
        End With
        With Grafikengine.ptfRotCenter
            .X = 0
            .Y = 0
        End With
        Grafikengine.ptfPosition = New Drawing.Point(XKoordinate - XHotspotBild(Zustand), YKoordinate - YHotspotBild(Zustand))
        With Grafikengine.szfScale
            .Height = Hoehe(Zustand)
            .Width = Breite(Zustand)
        End With
        Grafikengine.Sprite.Draw2D(Maustextur(Zustand), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
    End Sub
    Public Sub New()
        XKoordinaten = 0
        YKoordinaten = 0
        CursorLaden()
    End Sub
    Public Shared Sub CursorLaden()
        If DataSettings.draw3D Then
            Array.Resize(MeshCursor, 8)
        End If
        Array.Resize(XHotspotBild, 8)
        Array.Resize(YHotspotBild, 8)
        Array.Resize(AnzahlderZustaende, 8)

        For Each Maustexture In Maustextur
            Maustexture.Dispose()
        Next
        Grafikengine.Grafikkarte.EvictManagedResources()
        Array.Resize(Maustextur, 8)
        Array.Resize(Breite, 8)
        Array.Resize(Hoehe, 8)
        If Hauptmenue.ZoomedIn Then
            uCursorladen(1, 0, 0, "Cursor", 24, 24, Zustaende.Menue)
            uCursorladen(4, 17, 18, "Cursor+Spiel", 45, 50, Zustaende.Normal)
            uCursorladen(4, 17, 18, "Cursor+NichtPlazierbar", 45, 50, Zustaende.NichtPlazierbar)
            uCursorladen(4, 17, 18, "Cursor+Abzug", 45, 50, Zustaende.Abzug)
            uCursorladen(4, 21, 22, "Cursor+Angriff", 48, 48, Zustaende.Angriff)
            uCursorladen(3, 60, 60, "Cursor+SiloKlein", 120, 120, Zustaende.SiloAnzeigeKlein)
            uCursorladen(3, 84, 84, "Cursor+SiloMittel", 168, 168, Zustaende.SiloAnzeigeMittel)
            uCursorladen(3, 132, 132, "Cursor+SiloOmegaRakete", 264, 264, Zustaende.SiloOmegaRakete)
        Else
            uCursorladen(1, 0, 0, "Cursor", 24, 24, Zustaende.Menue)
            uCursorladen(4, 11, 12, "Cursor+Spiel", 30, 33, Zustaende.Normal)
            uCursorladen(4, 11, 12, "Cursor+NichtPlazierbar", 30, 33, Zustaende.NichtPlazierbar)
            uCursorladen(4, 11, 12, "Cursor+Abzug", 30, 33, Zustaende.Abzug)
            uCursorladen(4, 14, 15, "Cursor+Angriff", 32, 32, Zustaende.Angriff)
            uCursorladen(3, 40, 40, "Cursor+SiloKlein", 80, 80, Zustaende.SiloAnzeigeKlein)
            uCursorladen(3, 56, 56, "Cursor+SiloMittel", 112, 112, Zustaende.SiloAnzeigeMittel)
            uCursorladen(3, 88, 88, "Cursor+SiloOmegaRakete", 176, 176, Zustaende.SiloOmegaRakete)
        End If
    End Sub
    Private Shared Sub uCursorladen(ByVal Frames As Integer, ByVal HotspotX As Integer, ByVal HotspotY As Integer, _
                                    ByVal Bild As String, ByVal Breite As Integer, ByVal Hoehe As Integer, ByVal Index As Integer)
        AnzahlderZustaende(Index) = Frames
        XHotspotBild(Index) = HotspotX
        YHotspotBild(Index) = HotspotY
        If Hauptmenue.ZoomedIn Then
            Maustextur(Index) = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "Cursor\Zoomed In\" + Bild + ".png")
        Else
            Maustextur(Index) = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "Cursor\Zoomed Out\" + Bild + ".png")
        End If
        If DataSettings.draw3D Then
            MeshCursor(Index) = New Objekt3D
            MeshCursor(Index).MeshBildLaden(DataSettings.Resourcenpfad + "Cursor\" + Bild + ".x")
        End If
        ObjektMaus.Breite(Index) = Breite
        ObjektMaus.Hoehe(Index) = Hoehe
    End Sub
    ''' <summary>
    ''' Zeichnet die Maus mit dem einem Feuerradius aussen rum!
    ''' </summary>
    ''' <remarks></remarks>
    Private Shared Sub MalenHilfsRadius()
        If TypeOf Objektverwalter.Menue Is ObjektSpielMenue Then
            Dim M As ObjektSpielMenue = Objektverwalter.Menue
            If M.Spielmodus = ObjektSpielMenue.Spielmodi.Angriff Then
                Exit Sub
            End If
        End If

        If DataSettings.draw3D Then

        ElseIf DataSettings._2D_3D_Malen Then
            If Objektverwalter.Spielfeld IsNot Nothing Then
                If Objektverwalter.Spielfeld.AktuelleEinheit IsNot Nothing Then
                    If TexturenHalter.GetMausFeuerradiusTextur IsNot Nothing Then
                        Dim Cube(3) As CustomVertex.PositionTextured
                        Cube(0) = New CustomVertex.PositionTextured(0, 0, 0, 0, 1)
                        Cube(1) = New CustomVertex.PositionTextured(0, 0, 1, 0, 0)
                        Cube(2) = New CustomVertex.PositionTextured(1, 0, 0, 0.5, 1)
                        Cube(3) = New CustomVertex.PositionTextured(1, 0, 1, 0.5, 0)
                        Dim Max As Integer = Objektverwalter.Spielfeld.AktuelleEinheit.MaximaleReichweite
                        Dim X As Integer = Hauptmenue.SpielfeldPunkt.X
                        Dim Y As Integer = Hauptmenue.SpielfeldPunkt.Y
                        If Max > 1 Then 'So eine Fernwaffe
                            Dim L As ObjektLandschaft = Wegsuchsystem.getFeldRundrum(X, Y, ObjektSpielfeld.Bodenschlacht, Max, Max, Nothing, Objektverwalter.Spielfeld)
                            Do Until L Is Nothing
                                Dim Vec As Vector3 = ObjektSpielfeld.CalcDraw2D3DVec(L.KooX, ObjektSpielfeld.SpielfeldLayer.Cursor, L.KooY)
                                If L.KooX - X = 0 Then

                                    If L.KooY > Y Then
                                        Cube(0).Tu = 0 : Cube(0).Tv = 0
                                        Cube(1).Tu = 0 : Cube(1).Tv = 1
                                        Cube(2).Tu = 0.5 : Cube(2).Tv = 0
                                        Cube(3).Tu = 0.5 : Cube(3).Tv = 1
                                        Grafikengine.malen2Din3D(Vec, Cube, TexturenHalter.GetMausFeuerradiusTextur, Color.White)
                                    Else
                                        Cube(0).Tu = 0 : Cube(0).Tv = 1
                                        Cube(1).Tu = 0 : Cube(1).Tv = 0
                                        Cube(2).Tu = 0.5 : Cube(2).Tv = 1
                                        Cube(3).Tu = 0.5 : Cube(3).Tv = 0
                                        Grafikengine.malen2Din3D(Vec, Cube, TexturenHalter.GetMausFeuerradiusTextur, Color.White)
                                    End If
                                ElseIf L.KooY - Y = 0 Then
                                    If L.KooX > X Then
                                        Cube(0).Tu = 0.5 : Cube(0).Tv = 1
                                        Cube(1).Tu = 0 : Cube(1).Tv = 1
                                        Cube(2).Tu = 0.5 : Cube(2).Tv = 0
                                        Cube(3).Tu = 0 : Cube(3).Tv = 0
                                        Grafikengine.malen2Din3D(Vec, Cube, TexturenHalter.GetMausFeuerradiusTextur, Color.White)
                                    Else
                                        Cube(0).Tu = 0.5 : Cube(0).Tv = 0
                                        Cube(1).Tu = 0 : Cube(1).Tv = 0
                                        Cube(2).Tu = 0.5 : Cube(2).Tv = 1
                                        Cube(3).Tu = 0 : Cube(3).Tv = 1
                                        Grafikengine.malen2Din3D(Vec, Cube, TexturenHalter.GetMausFeuerradiusTextur, Color.White)
                                    End If
                                Else
                                    If L.KooX > X Then
                                        If L.KooY > Y Then
                                            Cube(0).Tu = 1 : Cube(0).Tv = 0
                                            Cube(1).Tu = 1 : Cube(1).Tv = 1
                                            Cube(2).Tu = 0.5 : Cube(2).Tv = 0
                                            Cube(3).Tu = 0.5 : Cube(3).Tv = 1
                                            Grafikengine.malen2Din3D(Vec, Cube, TexturenHalter.GetMausFeuerradiusTextur, Color.White)
                                        Else
                                            Cube(0).Tu = 1 : Cube(0).Tv = 1
                                            Cube(1).Tu = 1 : Cube(1).Tv = 0
                                            Cube(2).Tu = 0.5 : Cube(2).Tv = 1
                                            Cube(3).Tu = 0.5 : Cube(3).Tv = 0
                                            Grafikengine.malen2Din3D(Vec, Cube, TexturenHalter.GetMausFeuerradiusTextur, Color.White)
                                        End If
                                    Else
                                        If L.KooY > Y Then
                                            Cube(0).Tu = 0.5 : Cube(0).Tv = 0
                                            Cube(1).Tu = 0.5 : Cube(1).Tv = 1
                                            Cube(2).Tu = 1 : Cube(2).Tv = 0
                                            Cube(3).Tu = 1 : Cube(3).Tv = 1
                                            Grafikengine.malen2Din3D(Vec, Cube, TexturenHalter.GetMausFeuerradiusTextur, Color.White)
                                        Else
                                            Cube(0).Tu = 0.5 : Cube(0).Tv = 1
                                            Cube(1).Tu = 0.5 : Cube(1).Tv = 0
                                            Cube(2).Tu = 1 : Cube(2).Tv = 1
                                            Cube(3).Tu = 1 : Cube(3).Tv = 0
                                            Grafikengine.malen2Din3D(Vec, Cube, TexturenHalter.GetMausFeuerradiusTextur, Color.White)
                                        End If
                                    End If
                                End If
                                L = Wegsuchsystem.getFeldRundrum(X, Y, ObjektSpielfeld.Bodenschlacht, Max, Max, L, Objektverwalter.Spielfeld)
                            Loop
                        End If

                    End If
                End If
            End If
        Else
            If Objektverwalter.Spielfeld IsNot Nothing Then
                If Objektverwalter.Spielfeld.AktuelleEinheit IsNot Nothing Then
                    If TexturenHalter.GetMausFeuerradiusTextur IsNot Nothing Then
                        Dim sngRotation As Double = 0
                        Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
                        Grafikengine.ptfRotCenter = New Point(Hauptmenue.Feldbreite / 2, Hauptmenue.Feldbreite / 2)
                        Dim Max As Integer = Objektverwalter.Spielfeld.AktuelleEinheit.MaximaleReichweite
                        Dim X As Integer = Hauptmenue.SpielfeldPunkt.X
                        Dim Y As Integer = Hauptmenue.SpielfeldPunkt.Y
                        With Grafikengine.szfScale
                            .Width = Hauptmenue.Feldbreite
                            .Height = Hauptmenue.Feldbreite
                        End With
                        If Max > 1 Then 'So eine Fernwaffe
                            Dim L As ObjektLandschaft = Wegsuchsystem.getFeldRundrum(X, Y, ObjektSpielfeld.Bodenschlacht, Max, Max, Nothing, Objektverwalter.Spielfeld)
                            Do Until L Is Nothing
                                Grafikengine.ptfPosition = New Drawing.Point(L.KooX * Hauptmenue.Feldbreite + Objektverwalter.Spielfeld.BildschirmKooX, L.KooY * Hauptmenue.Feldbreite + Objektverwalter.Spielfeld.BildschirmKooY)
                                If L.KooX - X = 0 Then
                                    With Grafikengine.recBild
                                        .X = 0 : .Width = Hauptmenue.Feldbreite
                                        .Y = 0 : .Height = Hauptmenue.Feldbreite
                                    End With

                                    If L.KooY > Y Then
                                        sngRotation = Math.PI
                                        Grafikengine.Sprite.Draw2D(TexturenHalter.GetMausFeuerradiusTextur, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                                    Else
                                        sngRotation = 0
                                        Grafikengine.Sprite.Draw2D(TexturenHalter.GetMausFeuerradiusTextur, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                                    End If
                                ElseIf L.KooY - Y = 0 Then
                                    With Grafikengine.recBild
                                        .X = 0 : .Width = Hauptmenue.Feldbreite
                                        .Y = 0 : .Height = Hauptmenue.Feldbreite
                                    End With

                                    If L.KooX > X Then
                                        sngRotation = Math.PI / 2
                                        Grafikengine.Sprite.Draw2D(TexturenHalter.GetMausFeuerradiusTextur, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                                    Else
                                        sngRotation = Math.PI * 3 / 2
                                        Grafikengine.Sprite.Draw2D(TexturenHalter.GetMausFeuerradiusTextur, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                                    End If
                                Else
                                    With Grafikengine.recBild
                                        .X = Hauptmenue.Feldbreite : .Width = Hauptmenue.Feldbreite
                                        .Y = 0 : .Height = Hauptmenue.Feldbreite
                                    End With
                                    If L.KooX > X Then
                                        If L.KooY > Y Then
                                            sngRotation = Math.PI
                                            Grafikengine.Sprite.Draw2D(TexturenHalter.GetMausFeuerradiusTextur, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                                        Else
                                            sngRotation = Math.PI / 2
                                            Grafikengine.Sprite.Draw2D(TexturenHalter.GetMausFeuerradiusTextur, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                                        End If
                                    Else
                                        If L.KooY > Y Then
                                            sngRotation = Math.PI * 3 / 2
                                            Grafikengine.Sprite.Draw2D(TexturenHalter.GetMausFeuerradiusTextur, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                                        Else
                                            sngRotation = 0
                                            Grafikengine.Sprite.Draw2D(TexturenHalter.GetMausFeuerradiusTextur, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                                        End If
                                    End If
                                End If
                                L = Wegsuchsystem.getFeldRundrum(X, Y, ObjektSpielfeld.Bodenschlacht, Max, Max, L, Objektverwalter.Spielfeld)
                            Loop
                        End If
                    End If
                End If
            End If
        End If
    End Sub
End Class
